#include "Usart_Scree_Show.h"
#include <string.h>

static char tx_buff[100];



//  /**
// 	* 函    数：判断指定点是否在指定多边形内部
// 	* 参    数：nvert 多边形的顶点数
// 	* 参    数：vertx verty 包含多边形顶点的x和y坐标的数组
// 	* 参    数：testx testy 测试点的X和y坐标
// 	* 返 回 值：指定点是否在指定多边形内部，1：在内部，0：不在内部
// 	*/
//   uint8_t Screen_pnpoly(uint8_t nvert, int16_t *vertx, int16_t *verty, int16_t testx, int16_t testy)
//   {
// 	  int16_t i, j, c = 0;
	  
// 	  /*此算法由W. Randolph Franklin提出*/
// 	  /*参考链接：https://wrfranklin.org/Research/Short_Notes/pnpoly.html*/
// 	  for (i = 0, j = nvert - 1; i < nvert; j = i++)
// 	  {
// 		  if (((verty[i] > testy) != (verty[j] > testy)) &&
// 			  (testx < (vertx[j] - vertx[i]) * (testy - verty[i]) / (verty[j] - verty[i]) + vertx[i]))
// 		  {
// 			  c = !c;
// 		  }
// 	  }
// 	  return c;
//   }

//清屏
void Screen_Clear(Colour colour)
{
    memset(tx_buff,0,sizeof(tx_buff));
    sprintf(tx_buff,"cls %d\xff\xff\xff",colour);
    tjc_send_string(tx_buff);
}
//部分清屏
void Screen_ClearArea(int16_t X, int16_t Y, uint8_t Width, uint8_t Height,Colour colour)
{
    memset(tx_buff,0,sizeof(tx_buff));
    sprintf(tx_buff,"fill %d,%d,%d,%d,%d\xff\xff\xff",X,Y,Width,Height,colour);
    tjc_send_string(tx_buff);
}
//画线
void Screen_Line(int16_t X0, int16_t Y0, int16_t X1, int16_t Y1,Colour colour)
{
    memset(tx_buff,0,sizeof(tx_buff));
    sprintf(tx_buff,"line %d,%d,%d,%d,%d\xff\xff\xff",X0, Y0, X1, Y1,colour);
    tjc_send_string(tx_buff);
}
//画点
void Screen_Point(int16_t X,int16_t Y,Colour colour)
{
    memset(tx_buff,0,sizeof(tx_buff));
    sprintf(tx_buff,"line %d,%d,%d,%d,%d\xff\xff\xff",X, Y, X, Y,colour);
    tjc_send_string(tx_buff);
}
//画空心矩形
void Screen_DrawRectangle_Hollow(int16_t X0, int16_t Y0, int16_t X1, int16_t Y1,Colour colour)
{
    memset(tx_buff,0,sizeof(tx_buff));
    sprintf(tx_buff,"draw %d,%d,%d,%d,%d\xff\xff\xff",X0, Y0, X1, Y1,colour);
    tjc_send_string(tx_buff);
}

void Screen_Num(int16_t a,int16_t b)
{
    memset(tx_buff,0,sizeof(tx_buff));
    sprintf(&tx_buff,"n%d.val=%d\xff\xff\xff",a,b);
    tjc_send_string(tx_buff);
}

void Screen_String(char *String,...)
{
    memset(tx_buff,0,sizeof(tx_buff));
    sprintf(&tx_buff,String);
    tjc_send_string(tx_buff);
}

// /**
//  * @brief 画三角形 
//  * @param x0
//  * @param y0
//  * @param x1
//  * @param y1
//  * @param x2
//  * @param y2
//  * @param IsFilled//是否填充颜色
//  * @param Colour//颜色
//  */
// void Screen_DrawTriangle(int16_t X0, int16_t Y0, int16_t X1, int16_t Y1, int16_t X2, int16_t Y2,uint8_t IsFilled,Colour colour)
//   {
// 	  int16_t minx = X0, miny = Y0, maxx = X0, maxy = Y0;
// 	  int16_t i, j;
// 	  int16_t vx[] = {X0, X1, X2};
// 	  int16_t vy[] = {Y0, Y1, Y2};
	  
// 	  if (!IsFilled)			//指定三角形不填充
// 	  {
// 		  /*调用画线函数，将三个点用直线连接*/
// 		  Screen_Line(X0, Y0, X1, Y1,colour);
// 		  Screen_Line(X0, Y0, X2, Y2,colour);
// 		  Screen_Line(X1, Y1, X2, Y2,colour);
// 	  }
// 	  else					//指定三角形填充
// 	  {
// 		  /*找到三个点最小的X、Y坐标*/
// 		  if (X1 < minx) {minx = X1;}
// 		  if (X2 < minx) {minx = X2;}
// 		  if (Y1 < miny) {miny = Y1;}
// 		  if (Y2 < miny) {miny = Y2;}
		  
// 		  /*找到三个点最大的X、Y坐标*/
// 		  if (X1 > maxx) {maxx = X1;}
// 		  if (X2 > maxx) {maxx = X2;}
// 		  if (Y1 > maxy) {maxy = Y1;}
// 		  if (Y2 > maxy) {maxy = Y2;}
		  
// 		  /*最小最大坐标之间的矩形为可能需要填充的区域*/
// 		  /*遍历此区域中所有的点*/
// 		  /*遍历X坐标*/		
// 		  for (i = minx; i <= maxx; i ++)
// 		  {
// 			  /*遍历Y坐标*/	
// 			  for (j = miny; j <= maxy; j ++)
// 			  {
// 				  /*调用OLED_pnpoly，判断指定点是否在指定三角形之中*/
// 				  /*如果在，则画点，如果不在，则不做处理*/
// 				  if (Screen_pnpoly(3, vx, vy, i, j)) {Screen_Point(i, j, colour);}
// 			  }
// 		  }
// 	  }
//   }

// /**
//  * @brief 画箭头
//  * @param colour
//  */
// void Screen_DrawArrow_Up(Colour colour)
// {

    
// }
